package com.ry.day1129;

import java.util.HashMap;
import java.util.Map;

public class LC384 {

    static class Solution {
        /**
         * @param s: a string
         * @return: an integer
         */
        public int lengthOfLongestSubstring(String s) {
            if(s ==null || s.equals("")) return 0;
            Map<Character,Integer> map = new HashMap<>();
            int ans =1;
            int pre =1;
            map.put(s.charAt(0),0);
            for(int i=1;i<s.length();i++){
                char c = s.charAt(i);
                int prepos = -1;
                if(map.containsKey(c)){
                    prepos = map.get(c);
                }
                int p1 = i-prepos;
                int p2 = pre+1;
                int cur = Math.min(p1,p2);
                ans = Math.max(ans,cur);
                pre = cur;
                map.put(c,i);
            }
            return ans;
        }
    }

    public static void main(String[] args) {
        Solution obj = new Solution();
        System.out.println(obj.lengthOfLongestSubstring("abcabcbb"));
        System.out.println(obj.lengthOfLongestSubstring("bbbbb"));
        //f1();
    }


    public static void f1(){
        int[] a = {0};
        Integer c = 1;
        f2(a,c);
        System.out.println(a[0]+" "+ c);
    }

    public static void f2(int[] b,Integer c1){
        b[0]=22;
        c1=99;
    }

}


/*
LintCode-Logo
搜索题目、标签、题集
中文
您上个月的个人报告已生成，点击查看
avatar
384 · 最长无重复字符的子串
算法
中等
通过率
39%

题目
题解71
笔记
讨论99+
排名
记录
描述
给定一个字符串，请找出其中无重复字符的最长子字符串。

最短时间刷“透”算法面试：《66页算法宝典》.pdf

微信添加【jiuzhangfeifei】备注【66】领取


样例
样例 1:

输入: "abcabcbb"
输出: 3
解释: 最长子串是 "abc".
样例 2:

输入: "bbbbb"
输出: 1
解释: 最长子串是 "b".
挑战
O(n) 时间复杂度

相关知识
学习《2024年6月北美大厂最新面试真题精讲》课程中的1.4Amazon：最新面试精选002相关内容 ，了解更多相关知识！
标签
企业
Adobe
Bloomberg
Yelp
Amazon
Facebook
相关题目

386
最多有k个不同字符的最长子字符串
中等

928
最多有两个不同字符的最长子串
中等
推荐课程

系统设计 System Design 2024版
数据库、API、GFS、视频流等16大系统设计详解，实战练习拿下面试/晋升“拦路虎”
372/3347
已开启智能提示
发起考试
30 分 00 秒
123456789

控制台
        历史提交

 */
